package com.galaxy.product.service.impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.galaxy.common.core.utils.MapstructUtils;
import com.galaxy.common.core.utils.StringUtils;
import com.galaxy.common.mybatis.core.page.PageQuery;
import com.galaxy.common.mybatis.core.page.TableDataInfo;
import com.galaxy.product.domain.Product;
import com.galaxy.product.domain.ProductBrand;
import com.galaxy.product.domain.ProductCategory;
import com.galaxy.product.domain.ProductDetail;
import com.galaxy.product.domain.bo.ProductBo;
import com.galaxy.product.domain.vo.ProductVo;
import com.galaxy.product.mapper.ProductDetailMapper;
import com.galaxy.product.mapper.ProductMapper;
import com.galaxy.product.mapper.ProductBrandMapper;
import com.galaxy.product.mapper.ProductCategoryMapper;
import com.galaxy.product.service.IProductService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 商品Service业务层处理
 */
@RequiredArgsConstructor
@Service
public class ProductServiceImpl implements IProductService {

    private final ProductMapper baseMapper;
    private final ProductBrandMapper brandMapper;
    private final ProductCategoryMapper categoryMapper;

    private final ProductDetailMapper detailMapper;

    @DS("slave")
    @Override
    public TableDataInfo<ProductVo> queryPageDetailList(ProductBo bo, PageQuery pageQuery) {
        IPage<ProductVo> result = baseMapper.selectVoPage(pageQuery.build(),bo);
        return TableDataInfo.build(result);
    }

    @DS("slave")
    @Override
    public ProductVo queryPageDetailInfo(ProductBo bo){
        ProductVo productVoIPage = baseMapper.selectVoOne(bo);
        return productVoIPage;
    }

    @DS("slave")
    @Override
    public TableDataInfo<ProductVo> queryPageList(ProductBo bo, PageQuery pageQuery) {
//        LambdaQueryWrapper<Product> lqw = buildQueryWrapper(bo);
        IPage<ProductVo> result = baseMapper.selectVoListPage(pageQuery.build(), bo);
        // 设置品牌名称和分类名称
//        result.getRecords().forEach(this::setProductExtraInfo);
        return TableDataInfo.build(result);
    }

    @DS("slave")
    @Override
    public List<ProductVo> queryList(ProductBo bo) {
//        LambdaQueryWrapper<Product> lqw = buildQueryWrapper(bo);
        List<ProductVo> list = baseMapper.selectVoList(bo);
        // 设置品牌名称和分类名称
//        list.forEach(this::setProductExtraInfo);
        return list;
    }
    @DS("slave")
    @Override
    public Product getInfo(Long id) {
        Product product = baseMapper.selectListById(id);
        return product;
    }
    @DS("slave")
    @Override
    public Product getInfoById(Long id) {
        return baseMapper.selectListById(id);
    }

    @DS("slave")
    @Override
    public List<ProductVo> getBatchInfo(List<Long> ids) {
        if (ids == null || ids.isEmpty()) {
            return new ArrayList<>();
        }
        // 使用一条SQL查询获取所有信息（包括品牌和分类）
        List<Product> products = baseMapper.selectBatchByIds(ids);
        // 转换为VO对象
        List<ProductVo> productVos = MapstructUtils.convert(products, ProductVo.class);
        // 设置状态名称
        productVos.forEach(vo -> vo.setStatusName(vo.getStatus() == 1 ? "上架" : "下架"));
        return productVos;
    }

    @Override
    public void add(ProductBo bo) {
        Product add = MapstructUtils.convert(bo, Product.class);
        baseMapper.insert(add);
    }

    @Override
    public void update(ProductBo bo) {
        Product update = MapstructUtils.convert(bo, Product.class);
        baseMapper.updateById(update);
    }

    @Override
    public void delete(Long id) {
        baseMapper.deleteById(id);
    }

    @Override
    public void deleteBatch(Long[] ids) {
        for (Long id : ids) {
            baseMapper.deleteById(id);
        }
    }

    private LambdaQueryWrapper<Product> buildQueryWrapper(ProductBo bo) {
        LambdaQueryWrapper<Product> lqw = new LambdaQueryWrapper<>();
        lqw.like(StringUtils.isNotBlank(bo.getProductNo()), Product::getProductNo, bo.getProductNo());
        lqw.like(StringUtils.isNotBlank(bo.getName()), Product::getName, bo.getName());
        lqw.eq(bo.getCategoryId() != null, Product::getCategoryId, bo.getCategoryId());
        lqw.eq(bo.getBrandId() != null, Product::getBrandId, bo.getBrandId());
        lqw.eq(bo.getStatus() != null, Product::getStatus, bo.getStatus());
        lqw.orderByAsc(Product::getSort);
        return lqw;
    }

//    /**
//     * 设置商品额外信息（品牌名称、分类名称）
//     */
//    private void setProductExtraInfo(Product product) {
//        if (product != null) {
//            // 设置品牌名称
//            if (product.getBrandId() != null) {
//                ProductBrand brand = brandMapper.selectById(product.getBrandId());
//                if (brand != null) {
//                    product.setBrandName(brand.getName());
//                }
//            }
//
//            // 设置分类名称
//            if (product.getCategoryId() != null) {
//                ProductCategory category = categoryMapper.selectById(product.getCategoryId());
//                if (category != null) {
//                    product.setCategoryName(category.getName());
//                }
//            }
//
//            // 设置状态名称
//            if (product.getStatus() != null) {
//                product.setStatusName(product.getStatus() == 1 ? "上架" : "下架");
//            }
//        }
//    }
//

//    /**
//     * 设置商品额外信息（品牌名称、分类名称）
//     */
//    private void setProductExtraInfo(ProductVo product) {
//        if (product != null) {
//            // 设置品牌名称
//            if (product.getBrandId() != null) {
//                ProductBrand brand = brandMapper.selectById(product.getBrandId());
//                if (brand != null) {
//                    product.setBrandName(brand.getName());
//                }
//            }
//
//            // 设置分类名称
//            if (product.getCategoryId() != null) {
//                ProductCategory category = categoryMapper.selectById(product.getCategoryId());
//                if (category != null) {
//                    product.setCategoryName(category.getName());
//                }
//            }
//
//            // 设置状态名称
//            if (product.getStatus() != null) {
//                product.setStatusName(product.getStatus() == 1 ? "上架" : "下架");
//            }
//        }
//    }


    @Override
    public Boolean updateSales(Long productId, Integer number) {
        ProductDetail productDetail = detailMapper.selectById(productId);
        int update = detailMapper.update(new LambdaUpdateWrapper<ProductDetail>()
            .set(ProductDetail::getSales, productDetail.getSales()+number)
            .eq(ProductDetail::getProductId, productId));
        return update>0;
    }
}
